package com.woniuxy.springbootrabbit.delay;

import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

@Component
public class DelayProducter {
    @Resource
    private AmqpTemplate amqpTemplate;

    // 参数3：当前消息的过期时间
    public void send(String msg, String routingKey, int delay){
        // 将消息发送到交换机
        // 参数1：交换机
        // 参数2：路由
        // 参数3：消息
        System.out.println("producter:" + new Date());
        amqpTemplate.convertAndSend(
                "delay_exchange",
                routingKey,
                msg,    // 消息
                new MessagePostProcessor() {  // 消息发送之前的处理器
                    @Override
                    public Message postProcessMessage(Message message) throws AmqpException {
                        // 设置当前消息的过期时间
                        message.getMessageProperties().setDelay(delay);
                        // 返回消息
                        return message;
                    }
                }
        );
    }
}
